home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / vlapak1.zip / FPOLY256.ZIP / GXSPPT.ASM < prev    next >
Assembly Source File  |  1991-12-17  |  5KB  |  333 lines

  1.     TITLE    GSPPT - 320x200x16 mode support
  2.     NAME    GSPPT
  3.  
  4.  
  5.     COMMENT    $
  6.  
  7.     Name:        GXSPPT
  8.  
  9.         Written and (c) by Dave Stampe 9/11/91
  10.         Not for commercial use, so get permission
  11.         before marketing code using this stuff!
  12.         For private PD use only.
  13.  
  14.         $
  15.  
  16.         .MODEL large
  17.         .CODE
  18.  
  19.  ;
  20.  ; void vsync();        /* waits for vert. sync pulse */
  21.  ;
  22.         PUBLIC    _vsync
  23.  
  24. _vsync    proc    far
  25.  
  26.     push    bp
  27.     mov    bp,sp
  28.     mov        dx,03DAh
  29.     in        al,dx        ; test if 0
  30.     test        al,8
  31.     je    short @11@218
  32. @11@122:
  33.     in        al,dx
  34.     nop
  35.     test        al,8            ; wait for 0
  36.     jne    short @11@122
  37. @11@218:
  38.     in        al,dx
  39.     nop
  40.     test        al,8            ; wait for 1
  41.     je    short @11@218
  42.     pop    bp
  43.     ret
  44.  
  45. _vsync    endp
  46.  
  47.  ;
  48.  ; void setup_hdwe(int mode);    /* sets up VGA for line, poly draw */
  49.  ;                              /* modes are: 0=PUT, 1=OR,         */
  50.  ;                /*          2=AND, 3=XOR         */
  51.  ;                /* only PUT for X-mode             */
  52.  
  53.         PUBLIC    _setup_hdwe
  54.  
  55. _setup_hdwe    proc    far
  56.  
  57.     push    bp
  58.     mov    bp,sp
  59.     mov    dx,03CEH
  60.     mov    ax,00008h               ; all display copy bits
  61.     out    dx,ax
  62.  
  63.     mov    dx,03c4h        ; prepare plane mask reg. for access
  64.     mov    ax,0f02h
  65.     out    dx,ax
  66.     pop    bp
  67.     ret
  68.  
  69. _setup_hdwe    endp
  70.  
  71.  ;
  72.  ; void reset_hdwe()
  73.  ;
  74.  
  75.         PUBLIC    _reset_hdwe
  76.  
  77. _reset_hdwe    proc    far
  78.  
  79.     push    bp
  80.     mov    bp,sp
  81.     mov    dx,03CEH
  82.     mov    ax,0FF08h               ; all CPU data bits
  83.     out    dx,ax
  84.  
  85.     mov    dx,03c4h        ; prepare plane mask reg. for access
  86.     mov    ax,0f02h
  87.     out    dx,al
  88.     pop    bp
  89.     ret
  90.  
  91. _reset_hdwe    endp
  92.  
  93.  ;
  94.  ; int clr_page(int page, int color);    /* clear page to color */
  95.  ;
  96.  ;  /* returns 0 if OK, 1 if bad page */
  97.  
  98.         PUBLIC    _clr_page
  99.  
  100. _clr_page    proc    far
  101.  
  102.     push    bp
  103.     mov    bp,sp
  104.     dec    sp
  105.     dec    sp
  106.     push    di
  107.     cld
  108.     mov     cx,word ptr [bp+6]
  109.     cmp    cx,3               ; check for valid page
  110.     jle    short @14@74
  111.     mov    ax,65535
  112.     jmp    short @14@482
  113. @14@74:
  114.     call    far ptr _setup_hdwe     ; reset to default VGA mode
  115.     cld
  116.     mov    ax,0A000h
  117.     mov    es,ax
  118.     mov    bl,BYTE PTR [bp+8]
  119.     mov    bh,0ffh            ; figure what entry to read
  120.     mov    al,es:[bx]          ; read entry into latches
  121.  
  122.     mov     ax,word ptr [bp+6]
  123.     mov    cx,16000
  124.     mul    cx
  125.     mov    di,ax
  126.  
  127.     rep    stosb
  128.     call    far ptr _reset_hdwe
  129.     xor    ax,ax
  130. @14@482:
  131.     pop    di
  132.     mov    sp,bp
  133.     pop    bp
  134.     ret
  135.  
  136. _clr_page    endp
  137.  
  138.    ;
  139.    ;    int copy_page(int source, int dest)
  140.    ;
  141.    ;    /* returns 0 if OK, 1 if bad page */
  142.  
  143.         PUBLIC    _copy_page
  144.  
  145. _copy_page    proc    far
  146.  
  147.     push    bp
  148.     mov    bp,sp
  149.     sub    sp,4
  150.     push    si
  151.     push    di
  152.     cmp    word ptr [bp+6],3
  153.     jg    short @15@74            ; check for valid page #'s
  154.     cmp    word ptr [bp+8],3
  155.     jle    short @15@98
  156. @15@74:
  157.     mov    ax,65535
  158.     jmp    short @15@506
  159. @15@98:
  160.     call    far ptr _setup_hdwe       ; write VGA state
  161.     push    ds
  162.     cld
  163.     mov    ax,0A000h
  164.     mov    es,ax
  165.     mov    ds,ax
  166.     mov    cx,16000
  167.     mov    ax,word ptr [bp+6]        ; compute source address
  168.     mul    cx
  169.     mov    si,ax
  170.     mov    ax,word ptr [bp+8]    ; compute dest. address
  171.     mul    cx
  172.     mov    di,ax
  173.  
  174.     rep    movsb
  175.  
  176.     call    far ptr _reset_hdwe
  177.     pop    ds
  178.     xor    ax,ax
  179. @15@506:
  180.     pop    di
  181.     pop    si
  182.     mov    sp,bp
  183.     pop    bp
  184.     ret
  185.  
  186. _copy_page    endp
  187.  
  188.  
  189.  ;
  190.  ; void vga_reg(int reg)     /* integer: lsby=reg(0=color), msby=value */
  191.  ;
  192.  
  193.         PUBLIC    _vga_reg
  194.  
  195. _vga_reg    proc    far
  196.  
  197.     push    bp
  198.     mov    bp,sp
  199.     mov    dx,03CEH
  200.     mov    ax,WORD PTR [bp+6]
  201.     out    dx,ax
  202.     pop    bp
  203.     ret
  204.  
  205. _vga_reg    endp
  206.  
  207.  
  208.  
  209.  ;
  210.  ; void load_color(int color)    /* integer: loads latches with color */
  211.  ;
  212.  
  213.         PUBLIC    _load_color
  214.  
  215. _load_color    proc    far
  216.  
  217.     push    bp
  218.     mov    bp,sp
  219.     mov    ax,0a000h
  220.     mov    es,ax
  221.     mov    bl,BYTE PTR [bp+6]
  222.     mov    bh,0ffh        ; figure what entry to read
  223.     mov    al,es:[bx]      ; read entry into latches
  224.     pop    bp
  225.     ret
  226.  
  227. _load_color    endp
  228.  
  229.  
  230.  ;
  231.  ; void _set_vmode(int mode)    /* enters video mode thru BIOS */
  232.  ;                              /* mode: clear if MSB not 0    */
  233.  ;                /* mode 14h = X-mode           */
  234.  
  235.         PUBLIC    _set_vmode
  236.  
  237. _set_vmode    proc    far
  238.  
  239.     push    bp
  240.     mov    bp,sp
  241.  
  242.     mov    ah,0
  243.     mov    al,BYTE PTR [bp+6]
  244.     mov    bl,al
  245.     and    bl,07fh
  246.     cmp    bl,14h
  247.     jz    setxmode
  248.     int    10h
  249.     pop    bp
  250.     ret
  251.  
  252. setxmode:
  253.     mov    ah,0        ; set 256-color mode
  254.     mov    al,13h
  255.     int    10h
  256.  
  257.     mov    dx,03c4h    ; convert to X-mode addressing
  258.     mov    ax,0604h        ; chain mode off
  259.     out     dx,ax
  260.  
  261.     mov    dx,03d4h
  262.     mov    ax,0014h        ; doubleword off
  263.     out    dx,ax
  264.     mov    ax,0E317h       ; byte mode on
  265.     out    dx,ax
  266.  
  267.     call     far ptr _reset_hdwe
  268.  
  269.     mov    ax,WORD PTR[bp+6]
  270.     test    al,080h
  271.     jnz    dontclear
  272.  
  273.     mov    ax,0f02h
  274.     out    dx,ax        ; clear all planes at once
  275.     mov    ax,0a000h
  276.     mov    es,ax
  277.     xor    di,di
  278.     mov    cx,0ffffh
  279.     xor    ax,ax
  280.     rep    stosb
  281.  
  282.     mov    di,0ff00h    ; setup latch color table
  283.     mov    cx,100h
  284.     xor    al,al
  285. ctloop:    stosb
  286.     inc    al
  287.     loop    ctloop
  288.  
  289. dontclear:
  290.     pop    bp
  291.     ret
  292.  
  293. _set_vmode    endp
  294.  
  295.  
  296.  ;
  297.  ; void _set_vpage(int page)    /* sets video page */
  298.  ;
  299.  
  300.         PUBLIC    _set_vpage
  301.  
  302. _set_vpage    proc    far
  303.  
  304.     push    bp
  305.     mov    bp,sp
  306.     mov    ah,5
  307.     mov    al,BYTE PTR [bp+6]
  308.     xor    ah,ah
  309.     cmp    al,4        ; check page #
  310.     jae    badpage
  311.  
  312.     mov    bx,16000
  313.     mul    bx
  314.  
  315.     mov    bh,ah
  316.     mov    ah,al           ; page # -> address
  317.     mov    al,0dh
  318.     mov    bl,0ch
  319.  
  320.     mov    dx,03d4h        ; set CRTC address
  321.     out    dx,ax
  322.     mov    ax,bx
  323.     out    dx,ax
  324. badpage:
  325.     pop    bp
  326.     ret
  327.  
  328. _set_vpage    endp
  329.  
  330.  
  331.         end
  332.  
  333.